#!/usr/bin/python3
# _*_ coding: utf-8 _*_
#
# Copyright (C) 2024 - 2024 heihieyouheihei, Inc. All Rights Reserved 
#
# @Time    : 2024/9/9 17:29
# @Author  : Yuyun
# @File    : 跳跃游戏_最小到达次数.py
# @IDE     : PyCharm

"""
给定一个非负整数数组，你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:
输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置，跳  1  步，然后跳  3  步到达数组的最后一个位置。
说明: 假设你总是可以到达数组的最后一个位置。

"""

class Solution:
    """
    贪心策略
    局部最优：当前可移动距离尽可能多走，如果还没到终点，步数再加一
    整体最优：一步尽可能多走，从而达到最少步数。
    """
    def jump_game_times(self, nums):
        length = len(nums)
        if length == 1:
            return 0
        curcover = 0
        nextcover = 0
        result = 0
        for i in range(length):
            #   下一次的覆盖范围
            nextcover = max(i + nums[i], nextcover)
            #   遍历完当前覆盖范围
            if i == curcover:
                #   当前覆盖范围无法覆盖结尾，则需下一次
                if curcover != length - 1:
                    result += 1
                    curcover = nextcover
                    #   下一次覆盖范围直接覆盖结尾，则直接退出
                    if curcover >= length - 1:
                        break
                #   当前覆盖范围直接覆盖结尾
                else:
                    break
        return result

    def jump_game_times_I(self,nums):
        if len(nums) == 1:  # 如果数组只有一个元素，不需要跳跃，步数为0
            return 0
        i = 0  # 当前位置
        count = 0  # 步数计数器
        cover = 0  # 当前能够覆盖的最远距离
        while i <= cover:  # 当前位置小于等于当前能够覆盖的最远距离时循环
            for i in range(i, cover + 1):  # 遍历从当前位置到当前能够覆盖的最远距离之间的所有位置
                cover = max(nums[i] + i, cover)  # 更新当前能够覆盖的最远距离
                if cover >= len(nums) - 1:  # 如果当前能够覆盖的最远距离达到或超过数组的最后一个位置，直接返回步数+1
                    return count + 1
            count += 1  # 每一轮遍历结束后，步数+1


if __name__ == "__main__":
    nums = list(map(int, input().split(',')))
    solution = Solution()
    result = solution.jump_game_times(nums)
    print(result)